Booting of a computer system is a bootstrapping process. When the computer system is powered on, the process initializes the computer system hardware and then starts an operating system (e.g. a kernel). A brief booting sequence normally starts with a basic input output system (BIOS), a boot loader then the kernel.
When the computer system is powered on, the BIOS performs a power on self test (POST) that initializes devices including Random Access Memory (RAM), processor, keyboard, and monitor etc. Normally, a processor in a computer system is a functional hardware unit that includes single CPU or multiple CPUs (often called single-core processor or multi-core processor). Or, a computer system may include multiple processors. If the computer system includes multiple CPUs (e.g. in the forms of multi-processor system or multi-core processor system), one of the CPUs may be determined to be a “boot CPU” which executes the BIOS initialization codes and kernel initialization codes for the booting process. The remaining CPUs (often called application processors (APs)) remain idle till the OS starts executing. Once the BIOS initialization is done, a boot device is identified and the boot loader is loaded from the boot device to the RAM and control is passed to the boot loader. The boot loader determines which OS (e.g. kernel) to boot, loads the determined OS from the boot device to the RAM and passes the control to the OS. Once the OS starts executing, it initializes resources and data structure, the remaining CPUs and executes an initial script which initializes various services.
In the most existing computer systems, the above-described booting steps are executed sequentially by one CPU only. An amount of time is spent in the booting process, and reducing the booting time is a major concern.